//使用工具类的实现:
// 1.获取系统时间
//2.判断文件是否存在
//3.获取文件所在的路径
//4.创建目录

#ifndef __L_UTIL_H__
#define __L_UTIL_H__

#include <iostream>
#include <string>
#include <ctime>
#include <sys/stat.h>


namespace Log
{
    namespace util
    {
        class Date
        {
        public:
            //获取当前的时间戳
            static time_t now()
            {
                return time(nullptr);
            }
        };

        class file
        {
        public:
            //判断文件是否存在
            static bool Exists(const std::string& fileName)
            {
                struct stat st;
                return stat(fileName.c_str(), &st) == 0;
            }

            // 根据传来的文件路径获取文件的所在路径 ./abc/def/a.txt
            static std::string Path(const std::string& path)
            {
                size_t pos = path.find_last_of("/\\");
                if(pos == std::string::npos)
                {
                    //没有找到路径分隔符就说明文件在当前目录下直接返回当前目录
                    return ".";
                }
                return path.substr(0, pos);
            }

            //如果参数中的目录不存在就创建, 存在就不创建  ./abc/def/a.txt
            static void CreateDir(const std::string& dir)
            {
                if(dir.empty())
                {
                    return;
                }
                if(Exists(dir))
                {
                    return;
                }
                size_t pos = 0;
                size_t index = 0;
                while(index < dir.size())
                {
                    pos = dir.find_first_of("/\\", index);
                    if(pos == std::string::npos)
                    {
                        //说明这个目录只有一级, 创建这个目录就可以了
                        mkdir(dir.c_str(), 0775);
                        break;
                    }
                    std::string parentDir = dir.substr(0, pos + 1);
                    index = pos + 1;
                    if(Exists(parentDir) || parentDir == "." || parentDir == "..")
                    {
                        //目录存在就不用创建, 继续取下一级目录
                        continue;
                    }
                    mkdir(parentDir.c_str(), 0775);
                }
            }
        };
    }
}
#endif


